package com.sdk4.jinritemai.model.request;

import com.alibaba.fastjson.annotation.JSONField;
import com.sdk4.jinritemai.DoudianRequest;
import com.sdk4.jinritemai.model.response.DoudianProductAddV2Response;
import com.sdk4.jinritemai.model.response.DoudianProductEditV2Response;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
public class DoudianProductEditV2Request implements DoudianRequest<DoudianProductEditV2Response> {
    private final String method = "product.editV2";

    /**
     * 商品ID
     */
    private String productId;

    /**
     * 外部product_id
     */
    private String outProductId;

    /**
     * 商品类型 0-普通，3-虚拟，6玉石闪购，7云闪购
     */
    private String productType;

    /**
     * 叶子类目ID通过/shop/getShopCategory接口获取
     */
    private String categoryLeafId;

    /**
     * 老类目ID，一级分类id（三个分类级别请确保从属正确）
     * 即将废弃建议使用category_leaf_id
     */
    @JSONField(ordinal = 0)
    private String firstCid;

    /**
     * 老类目ID，二级分类id
     * 即将废弃建议使用category_leaf_id
     */
    private String secondCid;

    /**
     * 老类目ID，三级分类id
     * 即将废弃建议使用category_leaf_id
     */
    private String thirdCid;

    /**
     * 例:货号|8888^上市年份季节|2018年秋季
     * 属性名称|属性值 之间用|分隔, 多组之间用^分开
     */
    private String productFormat;

    /**
     * 商品名称，最多30个字符，不能含emoj表情
     */
    private String name;

    /**
     * 商家推荐语，不能含emoj表情
     */
    private String recommendRemark;

    /**
     * 商品轮播图，多张图片用 "|" 分开，第一张图为主图，最多5张，至少600x600，大小不超过1M
     */
    private String pic;

    /**
     * 商品描述，目前只支持图片。多张图片用 "|" 分开。不能用其他网站的文本粘贴，这样会出现css样式不兼容
     */
    private String description;

    /**
     * 支付方式，0货到付款 1在线支付，2，货到付款+在线支付
     */
    private String payType;

    /**
     * 划线价，单位分
     */
    private String marketPrice;

    /**
     * 售价，单位分
     */
    private String discountPrice;

    /**
     * 减库存类型：1-拍下减库存 2-付款减库存
     */
    private String reduceType;

    /**
     * 同店商品推荐：为空表示使用系统推荐；多个product_id使用“|”分开
     */
    private String assocIds;

    /**
     * 运费模板id，传0表示包邮，通过/freightTemplate/list接口获取
     */
    private String freightId;

    /**
     * 重量
     */
    private String weight;

    /**
     * 重量单位，0-kg, 1-g
     */
    private String weightUnit;

    /**
     * 承诺发货时间，单位是天
     * 不传则默认为2天，
     * presell_type为0或2均只支持传入2，
     * presell_type为1时支持可选值为: 2、3、5、7、10、15
     */
    private String deliveryDelayDay;

    /**
     * 发货模式，0-现货发货，1-预售发货，2-阶梯发货，默认0
     */
    private String presellType;

    /**
     * 预售模式下结束后，几天发货/阶梯模式下阶梯发货时间，3-30
     */
    private String presellDelay;

    /**
     * 预售结束时间，格式2020-02-21 18:54:27，最多支持设置距离当前30天
     */
    private String presellEndTime;


    /**
     * 是否支持7天无理由，0不支持，1支持，2支持（拆封后不支持）
     */
    private String supply_7day_return;

    /**
     * 客服电话号码
     */
    private String mobile;

    /**
     * false仅保存，true保存+提审
     */
    private String commit;

    /**
     * 品牌id (请求店铺授权品牌接口获取) (效果即为商品详情页面中的品牌字段)
     */
    private String brandId;

    /**
     * 商品创建和编辑操作支持设置质检报告链接,多个图片以逗号分隔
     */
    private String qualityReport;

    /**
     * 商品创建和编辑操作支持设置品类资质链接,多个图片以逗号分隔
     */
    private String classQuality;

    /**
     * 商家可见备注
     */
    private String remark;

    /**
     * 系统资质列表
     */
    private List<DoudianProductQuality> qualityList;

    /**
     * 如果不填，则规格名为各级规格名用 "-" 自动生成
     */
    private String specName;

    /**
     * 例:颜色|黑色,白色,黄色^尺码|S,M,L
     * 店铺通用规格，能被同类商品通用。多规格用^分隔，规格与规格值用|分隔，多个规格值用,分隔
     */
    private String specs;

    /**
     * sku详情，数量应该等于规格1规格2规格3，sku数量和规格组合数必须一致
     * sku不可售时，库存可设置为0。
     * json string，具体字段的含义见下表
     */
    private List<DoudianProductSpecPrice> specPrices;

    /**
     * 格式 img_url,img_url,img_url
     * 如颜色-尺寸, 颜色就是主规格, 颜色如黑,白,黄,它们图片url以逗号分隔
     * 注："pic"、"description"、"spec_pic"这三个字段里的传入的图片数量总和，
     * 不得超过50张。超过会报错：图片转链失败图片数量和规格数量对应
     */
    private String specPic;

    /**
     * 规格id, 要先创建商品通用规格, 如颜色-尺寸
     */
    private String specId;


    @Override
    public Class<DoudianProductEditV2Response> getResponseClass() {
        return DoudianProductEditV2Response.class;
    }

    @Override
    public String getMethod() {
        return method;
    }
}
